var fs = require('fs');
var path = require('path');

/**
 * 删除文件夹及其目录下所有文件
 * @param dir
 * @param cb
 */
exports.remove = function (dir, cb) {
    cb = cb || function () {
        };
    var dirs = [];

    try {
        iterator(dir, dirs);
        for (var i = 0, el; el = dirs[i++];) {
            fs.rmdirSync(el);//一次性删除所有收集到的目录
        }
        cb(null);
    } catch (e) {//如果文件或目录本来就不存在，fs.statSync会报错，不过我们还是当成没有异常发生
        e.code === "ENOENT" ? cb(null) : cb(e);
    }
}

function iterator(url, dirs) {
    var stat = fs.lstatSync(url);
    if (stat.isDirectory()) {
        dirs.unshift(url);//收集目录
        inner(url, dirs);
    } else if (stat.isFile()) {
        fs.unlinkSync(url);//直接删除文件
    }else if( stat.isSymbolicLink()){
        fs.unlinkSync(url);//直接删除文件
    }
}

function inner(url, dirs) {
    var arr = fs.readdirSync(url);
    for (var i = 0, el; el = arr[i++];) {
        iterator(path.join(url, el), dirs);
    }
}